/**
 * Created by liuwd on 14-10-20.
 */
/**
 * From扩展
 * getData 获取数据接口
 *
 * @param {Object} jq
 * @param {Object} params 设置为true的话，会把string型"true"和"false"字符串值转化为boolean型。
 */
$.extend($.fn.form.methods, {
    getData: function(jq, params){
        var formArray = jq.serializeArray();
        var oRet = {};
        for (var i in formArray) {
            if (typeof(oRet[formArray[i].name]) == 'undefined') {
                if (params) {
                    oRet[formArray[i].name] = (formArray[i].value == "true" || formArray[i].value == "false") ? formArray[i].value == "true" : formArray[i].value;
                }
                else {
                    oRet[formArray[i].name] = formArray[i].value;
                }
            }
            else {
                if (params) {
                    oRet[formArray[i].name] = (formArray[i].value == "true" || formArray[i].value == "false") ? formArray[i].value == "true" : formArray[i].value;
                }
                else {
                    oRet[formArray[i].name] += "," + formArray[i].value;
                }
            }
        }
        return oRet;
    }
});
/**
 * form表单采用ajax 提交数据
 *  参数说明：
 *      params：{
 *          onSubmit：提交前验证表单信息，验证的方法参考 Easyui的文档。
 *                    表单验证失败，不提交数据。验证通过，提交数据。
 *          url:提交的URL，
 *          method：表示提交的方式。
 *          success（data）:成功回调方法，data是数据。
 *          error:服务器错误的回调方法。
 *
 *      }
 *
 */
$.extend($.fn.form.methods, {
    ajax: function(jq, params){
        if(params.onSubmit){
            if(params.onSubmit.call(jq[0])){
                $.ajax({
                    type: params.method,
                    url:params.url,
                    data:jq.form("getData",true),
                    success: function (data) {
                        if(typeof data =="string")
                            data= JSON.parse(data);
                        params.success(data);
                    },
                    error: function (msg) {
                        if(params.error&& typeof params.error=="function"){
                            params.error(msg);
                        }
                    }
                });
            }
        }else{
            $.ajax({
                type: params.method,
                url:params.url,
                data:jq.form("getData",true),
                success: function (data) {
                    params.success(data);
                },
                error: function (msg) {
                    if(params.error&& typeof params.error=="function"){
                        params.error(msg);
                    }
                }
            });
        }

    }
});
/**
 *
 * 通过post方式回显表单数据。
 *
 * params:{
 *  url：controller地址。
 *  queryParams：查询参数{} 。
 *  success（data）:成功回调方法，data是数据。
 *  error:服务器错误的回调方法。
 * }
 */
$.extend($.fn.form.methods, {
    postLoad: function(jq, params){
        $.ajax({
            type: "post",
            url:params.url,
            data:params.queryParams,
            success: function (data) {
                if(data.success){
                      jq.form("load",data.data);
                      params.success.call(jq[0],data.data);
                }else{
                    $.messager.alert("信息提示",data.desp);
                    if(params.error&& typeof params.error=="function"){
                        params.error(msg);
                    }
                }
            },
            error: function (msg) {
                if(params.serverError)
                    params.serverError(msg);
            }
        });
    }
});
/**
 * 描述：表示采用ajax的post方式 提交。
 *   paras:是个js的对象（object） {
 *      url:""//提交的URL
 *      data:{}对象 表示提交的参数。
 *      success：function(data){//data：表示请求成功的返回的业务数据。
 *      }
 *      error:function(data){// 表示请求失败返回的业务数据。
 *      }
 *   }
 */
function ajaxPost(params){
    $.ajax({
        type: "post",
        url:params.url,
        data:params.data,
        success: function (data) {
            if(data.success){
               if(params.isShowAlert)
                $.messager.alert("信息提示",data.desp);
               params.success(data.data);
            }else{
                $.messager.alert("信息提示",data.desp);
                if(params.error&& typeof params.error=="function"){
                    params.error(msg);
                }
            }
        },
        error: function (msg) {
            if(params.serverError)
                params.serverError(msg);
        }
    });
}
/**
 * 描述：表示采用ajax的Get方式提交。
 *   paras:是个js的对象（object） {
 *      url:""//提交的URL
 *      data:{}对象 表示提交的参数。
 *      success：function(data){//data：表示请求成功的返回的业务数据。
 *      }
 *      error:function(data){// 表示请求失败返回的业务数据。
 *      }
 *   }
 */
function ajaxGet(params){
    $.ajax({
        type: "post",
        url:params.url,
        data:params.data,
        success: function (data) {
            if(data.success){
                $.messager.alert("信息提示",data.desp);
                params.success(data.data);
            }else{
                $.messager.alert("信息提示",data.desp);
                if(params.error&& typeof params.error=="function"){
                    params.error(msg);
                }
            }
        },
        error: function (msg) {
            if(params.serverError)
                params.serverError(msg);
        }
    });
}

/**
 * 展示编码的数据。
 * @param value 编码值
 * @param valueField 数据的value字段名称。
 * @param textField 数据的展示字段名称
 * @param data   编码数据。
 * @returns {*}
 */
function  showText(value,valueField,textField,data){
    if(data){
        for(var i= 0,len=data.length;i<len;i++){
           if(data[i][valueField]==value)
              return data[i][textField]
        }
    }
    return value;
}



/**
 * 远程校验,例如验证用户名是否存在,两个功能
 * <ul>
 *   <li>功能一：验证输入的内容在数据库中是否存在</li>
 *   <li>功能二：是否符合定义的规则</li>
 * </ul>
 * 用法如下：validType="exist['${ctx}/user/validateloginname','loginName','用户名已存在！']"
 * <ul>
 *   <li>第一参数：向后台发出的验证url</li>
 *   <li>第二参数：此时的表单元素的name值一致</li>
 *   <li>第三参数：当存在时，提示的信息</li>
 * </ul>
 */
$.extend($.fn.validatebox.defaults.rules, {
    exist: {
        validator: function(value, param) {
            var postdata = {};
            postdata[param[1]] = value;

            $.ajax({
                type: "post",
                url:param[0],
                data:postdata,
                success: function (data) {
                   if (data.success == false) {
                        $.fn.validatebox.defaults.rules.exist.message = param[2];
                        return false;
                    }
                    else {
                        return true;
                    }
                },
                error: function (msg) {
                }
            });




        },
        message: ''
    }
});

